#ifndef _MY_LINK_H_
#define _MY_LINK_H_
// #include "book.h"
#include "public.h"

#include "matrl.h"

typedef union elem_vector data_type;

typedef struct node
{
    data_type *data; // 数据域
    struct node *prev;
    struct node *next; // 指针域，指向后继节点的指针

} node;

typedef struct _list
{
    struct node *head; // 指针域
    struct node *end;  // 指针域
    int size;
} *list_inf;

list_inf link_create(void);                                                                    // 创建链表
void link_destory(list_inf l);                                                                 // 摧毁链表
void link_clear(list_inf l);                                                                   // 清除链表
void link_push_back(list_inf l, data_type *data);                                              // 尾插
void link_push_front(list_inf l, data_type *data);                                             // 头插
void link_insert(list_inf l, unsigned poe, data_type *data);                                   // 中插
void link_remove(list_inf l, void *data, int (*cmp)(void *, void *));                          // 删除节点
int link_updata(list_inf l, data_type *data, data_type *new_data, int (*cmp)(void *, void *)); // 修改某个节点的数据
data_type *link_find(list_inf l, data_type *data, int (*cmp)(void *, void *));                 // 查找数据返回数据指针
node *find_link_struct(list_inf l, void *data, int (*cmp)(const void *, const void *));        // 查找数据返回链表指针
void Reverse_to(list_inf l);                                                                   // 逆序;
void link_sort(list_inf l, int (*cmp)(const void *, const void *));

#endif
